home *** CD-ROM | disk | FTP | other *** search
/ SGI Varsity Update 1998 August / SGI Varsity Update 1998 August.iso / dist / dist6.5 / il_dev.idb / usr / include / il / ilHwManager.h.z / ilHwManager.h
C/C++ Source or Header  |  1998-07-29  |  5KB  |  148 lines

  1. #if 0 
  2.  
  3.     Copyright (c) 1995 SGI   All Rights Reserved
  4.     THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF SGI
  5.     The copyright notice above does not evidence any
  6.     actual or intended publication of such source code,
  7.     and is an unpublished work by Silicon Graphics, Inc.
  8.     This material contains CONFIDENTIAL INFORMATION that
  9.     is the property of Silicon Graphics, Inc. Any use,
  10.     duplication or disclosure not specifically authorized
  11.     by Silicon Graphics is strictly prohibited.
  12.     
  13.     RESTRICTED RIGHTS LEGEND:
  14.     
  15.     Use, duplication or disclosure by the Government is
  16.     subject to restrictions as set forth in subdivision
  17.     (c)(1)(ii) of the Rights in Technical Data and Computer
  18.     Software clause at DFARS 52.227-7013, and/or in similar
  19.     or successor clauses in the FAR, DOD or NASA FAR
  20.     Supplement.  Unpublished- rights reserved under the
  21.     Copyright Laws of the United States.  Contractor is
  22.     SILICON GRAPHICS, INC., 2011 N. Shoreline Blvd.,
  23.     Mountain View, CA 94039-7311
  24.  
  25. #endif
  26. #ifndef _ilHwManager_h_
  27. #define _ilHwManager_h_
  28.  
  29. /*
  30.     ilMpManager's for h/w acceleration; ilHwManager is a base class for
  31.     various types of h/w accelerated rendering.  This header file includes
  32.     a couple of miscellaneous managers for fillTile and qBarrier ops.
  33. */
  34.  
  35. #include <il/ilMpManager.h>
  36. #include <il/ilHwBarrier.h>
  37. #include <ifl/iflTile.h>
  38.  
  39. class ilFrameBufferImg;
  40. class ilHwContext;
  41. class ilHwImg;
  42.  
  43. // ilHwManager implements graphics hardware operations on ilFrameBufferImgs.
  44. // Typically these operations are broken down into portions called requests.
  45. // An ilHwManager organizes those requests by storing information common to
  46. // all the requests and providing a synchronization point to determine when
  47. // all the requests have completed (see ilMpManager.h for more information
  48. // on the MP architechture).  ilHwManager's exist to perform swap buffers,
  49. // fill areas with specified RGB values and draw image data.
  50. //
  51. class ilHwManager : public ilMpManager {
  52. public:
  53.     // Construct ilMpManager node and link it under the specified parent
  54.     // ilMpNode.  Record the ilFrameBufferImg we're going to be operating
  55.     // on and extract some information from it that we'll need close at
  56.     // hand.
  57.     //
  58.     ilHwManager(ilHwImg* img, ilMpNode* parent=NULL, int enables=0);
  59.     
  60.     // override go() to close force barrier if present
  61.     virtual void go();
  62.  
  63.     // Information common to all ilHwManagers:
  64.     //
  65.     ilHwImg* hwImg;        // ilHwImg to operate on
  66.     ilHwContext* ctx;        // copy of fbImg ilHwContext
  67.     int bufferEnables;
  68.     
  69. private:
  70.     ilHwBarrier* forceBarrier;    // forced barrier when parent has no barrier
  71. };
  72.  
  73.  
  74. // ilHwSwapMgr implements a swap buffer operation
  75. class ilHwSwapMgr : public ilHwManager {
  76. public:
  77.     ilHwSwapMgr(ilFrameBufferImg* img, ilMpNode* parent);
  78. };
  79.  
  80.  
  81. // ilHwFillMgr implements the fill operation.  An image tile in the
  82. // ilFrameBufferImg (fbImg) is filled with an RGB value.  A fill request
  83. // will be constructed and linked in for every fbImg page that intersects
  84. // the specified tile.
  85. //
  86. class ilHwFillMgr : public ilHwManager {
  87. public:
  88.     // Specify tile to fill, (x,y) to (x+nx,y+ny), in fbImg with specified
  89.     // red:green:blue value. 
  90.     //
  91.     ilHwFillMgr(ilFrameBufferImg* img, ilMpNode* parent, int x, int y, 
  92.         int nx, int ny, float red, float green, float blue, 
  93.         int bufferEnables);
  94. };
  95.  
  96.  
  97. // ilHwCallbackMgr implements a rendering callback for the specified frame
  98. // buffer image from the graphics thread.  The OpenGL context of the drawable
  99. // (if any) will be made current before the callback is called.  It is the
  100. // responsibility of the callback to setup any graphics state it needs and
  101. // restore it before returning.
  102. //
  103. class ilHwCallbackMgr : public ilHwManager {
  104. public:
  105.     // Specify a list of callbacks to 'prepare' for the rendering (called
  106.     // from a compute thread), do the actual 'render'ing (called from the
  107.     // graphics thread), and finally do any 'finish'ing cleanup (called
  108.     // from a compute thread).  The prepare and/or finish callback lists may 
  109.     // be NULL.  The caller arg will be passed to each of the callbacks invoked.
  110.     //
  111.     ilHwCallbackMgr(ilHwImg* img, ilMpNode* parent, 
  112.             ilCallback* prepare, ilCallback* render, 
  113.             ilCallback* finish, void* callerArg);
  114. };
  115.  
  116.  
  117. // ilHwRequest is the base class for requests that will be destined for
  118. // the graphics queue.  The main function of this base class is to ensure
  119. // an accurate count of graphics requests on an ilHwBarrier.
  120.  
  121. class ilHwRequest : public ilMpRequest {
  122. public:
  123.     virtual ~ilHwRequest();
  124.  
  125.     // notify of graphics request completion
  126.     void graphicsDone() 
  127.         { getHwBarrier()->graphicsDone(); didNotify = TRUE; }
  128.     
  129.     int getResQuantum() { return resQuantum; }
  130.     void setResQuantum(int q) { resQuantum = q; }
  131.  
  132. protected:
  133.     ilHwRequest(ilMpManager* parent, ilMpState initialState=ilMpGraphics) 
  134.     : ilMpRequest(parent, initialState) 
  135.         { init(); }
  136.     
  137.     ilHwRequest(ilHwRequest* sibling) 
  138.     : ilMpRequest(sibling) 
  139.         { init(); }
  140.  
  141. private:
  142.     void init();
  143.     
  144.     int resQuantum;    // resource quantum used by ilHwResource allocation
  145.     int didNotify;    // checkSwap must be called even if we are aborted
  146. };
  147. #endif
  148.